import TIM from "../../../../utils/tim-wx"
import utils from "../../../../utils/util.js"
const app = getApp();
Page({
  onReady(res) {
    this.ctx = wx.createLivePusherContext('pusher')
    this.createTim();
    this.animation = wx.createAnimation();
  },
  statechange(e) {
    console.log('live-pusher code:', e.detail.code)
  },
  /**
   * 页面的初始数据
   */
  data: {
    frontCamera: false, //视像头反转
    beauty: 6.3, //美颜
    whiteness: 3.0, //美白
    StatusBar: app.globalData.StatusBar,
    CustomBar: app.globalData.CustomBar,
    Custom: app.globalData.Custom,
    pull_url: '', //直播地址
    avatar: '', //直播头像
    chatMsg: [], //聊天消息
    userMessage: '', //用户输入消息
    roomId: '', //房间id
    roomName: '', //房间名称
    roomCount: ' ', //房间直播
    showInput: 0, //显示输入框
    pusherHeight: 0, //屏幕高度
    moreLeft: 0, //更多弹窗位置
    backgroundMute: false,
    enable_mic: false, //
    enableCamera: true, //是否打开相机
    isNotice: false //是否关注
  },
  onLoad: function (options) {
    let self = this;
    self.setData({
      roomName: options.roomName,
      roomCount: 0,
      avatar: options.avatar,
      pull_url: decodeURIComponent(options.pull_url),
      roomId: 'ACS' + options.roomId, //tim 字符串类型
      userId: 'ACS' + app.globalData.userInfo.UserID, //tim 字符串类型
      pusherHeight: app.globalData.screenHeight
    });
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 保持屏幕常亮
    wx.setKeepScreenOn({
      keepScreenOn: true
    })
  },
  /**
   * 创建tim
   */
  createTim: function () {
    let self = this;
    let opts = {
      SDKAppID: 1400314933 // 接入时需要将0替换为您的云通信应用的 SDKAppIDn/；
    };
    let tim = TIM.create(opts); // SDK 实例通常用 tim 表示
    tim.setLogLevel(4); // 普通级别，日志量较多，接入时建议使用    

    tim.on(TIM.EVENT.MESSAGE_RECEIVED, function (event) {
      event.data.forEach(d => {
        self.getMessage(d)
      });
    });

    self.tim = tim;
    self.getSign();
  },
  /**
   * 解析消息
   * @param {*} message 
   */
  getMessage: function (message) {
    let self = this;
    if (message.isSystemMessage) { //系统消息则返回
      return;
    }
    switch (message.type) {
      case TIM.TYPES.MSG_TEXT:
        self.renderMessage({
          ID: message.ID,
          nick: message.nick,
          text: message.payload.text
        });
        break;
      case TIM.TYPES.MSG_IMAGE:
        message.payload.imageFormat;
        break;
      case TIM.TYPES.MSG_AUDIO:
        message.payload.url;
        break;
      case TIM.TYPES.MSG_FILE:
        message.payload.fileName;
        break;
      case TIM.TYPES.MSG_GRP_TIP:
        self.getGroupTipNotice(message.payload);
        break;
    }
  },
  /**
   * 群组通知
   * @param {} payload 
   */
  getGroupTipNotice: function (payload) {
    switch (payload.operationType) {
      case TIM.TYPES.GRP_TIP_MBR_JOIN:
        this.getProfile(payload.userIDList);
        return `群成员：${payload.userIDList.join(',')}，加入群组`
      case TIM.TYPES.GRP_TIP_MBR_QUIT:
        return `群成员：${payload.userIDList.join(',')}，退出群组`
      case TIM.TYPES.GRP_TIP_MBR_KICKED_OUT:
        return `群成员：${payload.userIDList.join(',')}，被${payload.operatorID}踢出群组`
      case TIM.TYPES.GRP_TIP_MBR_SET_ADMIN:
        return `群成员：${payload.userIDList.join(',')}，成为管理员`
      case TIM.TYPES.GRP_TIP_MBR_CANCELED_ADMIN:
        return `群成员：${payload.userIDList.join(',')}，被撤销管理员`
      default:
        return '[群提示消息]'
    }
  },
  /**
   * 获取成员信息
   * @param {*} userIdList 
   */
  getProfile: function (userIdList) {
    let self = this;
    // 修改个人标配资料
    self.tim.getUserProfile({
      userIDList: userIdList
    }).then(
      function (imResponse) {
        imResponse.data.forEach((el) => {
          let id = utils.getGuid();
          self.renderMessage({
            ID: "A" + id.substring(1, 31),
            nick: el.nick,
            text: '欢迎加入'
          });
        });
      },
      function (imError) {
        console.warn('updateMyProfile error:', imError); // 更新资料失败的相关信息
      });
  },
  /**
   * 获取签名
   */
  getSign: function () {
    let self = this;
    let url = app.globalData.apiRootUrl + "/Live/GenSig";
    app.httpRequest({
      url: url,
      method: "GET",
      data: {
        user: self.data.userId
      },
      success: function (res) {
        let rdata = res.data;
        if (rdata.status == 0) {
          self.loginTap(rdata.data);
        } else {
          wx.showToast({
            title: rdata.data.message,
            icon: "none"
          })
        }
      }
    })
  },
  /**
   * 登录
   */
  loginTap: function (userSig) {
    let self = this;
    self.tim.login({
      userID: self.data.userId,
      userSig: userSig
    }).then(
      function (imResponse) {
        console.log("登录成功"); // 登录成功   
        //必须延迟，否则报错
        setTimeout(() => {
          self.createGroupTap();
          self.updateProfile();
        }, 500);
      },
      function (imError) {
        console.warn('登录失败的相关信息:', imError); // 登录失败的相关信息
      });
  },
  /**
   * 设置昵称
   */
  updateProfile: function () {
    let self = this;
    //性别转换
    var gender = TIM.TYPES.GENDER_MALE;
    if (app.globalData.userInfo.Sex == 2) {
      gender = TIM.TYPES.GENDER_FEMALE;
    }
    // 修改个人标配资料
    self.tim.updateMyProfile({
      nick: app.globalData.userInfo.NickName,
      avatar: app.globalData.userInfo.UserHead,
      gender: gender,
      allowType: TIM.TYPES.ALLOW_TYPE_ALLOW_ANY
    }).then(
      function (imResponse) {
        console.log("更新资料成功"); // 更新资料成功
      },
      function (imError) {
        console.warn('更新资料失败的相关信息', imError); // 更新资料失败的相关信息
      });
  },
  /**
   * 退出
   */
  logoutTap: function () {
    let self = this;
    let promise = self.data.tim.logout();
    promise.then(function (imResponse) {
      // console.log("登出成功"); // 登出成功
    }).catch(function (imError) {
      // console.warn('logout error:', imError);
    });
  },
  /**
   * 创建群组
   */
  createGroupTap: function () {
    let self = this;
    self.tim.createGroup({
      name: app.globalData.userInfo.UserName,
      type: TIM.TYPES.GRP_AVCHATROOM, //视频聊天室
      groupID: self.data.roomId
    }).then(
      function (imResponse) { // 创建成功
        console.log("群组创建成功"); // 创建的群的资料
        self.joinGroupTap();
      },
      function (imError) {
        console.warn('创建群组失败的相关信息:', imError); // 创建群组失败的相关信息
        self.joinGroupTap();
      });
  },
  /**
   * 解散群组
   */
  dismissGroupTap: function () {
    let self = this;
    self.tim.dismissGroup(self.data.roomId).then(
      function (imResponse) { // 解散成功
        console.log("被解散的群组" + imResponse.data.groupID); // 被解散的群组 ID
      },
      function (imError) {
        console.warn('dismissGroup error:', imError); // 解散群组失败的相关信息
      });
  },
  /**
   * 键入群组
   */
  joinGroupTap: function () {
    let self = this;
    self.tim.joinGroup({
      groupID: self.data.roomId,
      type: TIM.TYPES.GRP_AVCHATROOM
    }).then(
      function (imResponse) {
        switch (imResponse.data.status) {
          case TIM.TYPES.JOIN_STATUS_SUCCESS: // 加群成功
            console.log("加入的群组资料"); // 加入的群组资料
            break;
          case TIM.TYPES.JOIN_STATUS_ALREADY_IN_GROUP: // 已经在群中
            console.log("已经在群中")
            break;
          default:
            break;
        }
      },
      function (imError) {
        console.warn('joinGroup error:', imError); // 申请加群失败的相关信息
      });
  },
  /**
   * 退出群组
   */
  quitGroupTap: function () {
    let self = this;
    self.tim.quitGroup(self.data.roomId).then(
      function (imResponse) {
        console.log("退出成功的群" + imResponse.data.groupID); // 退出成功的群 ID
      },
      function (imError) {
        console.warn('quitGroup error:', imError); // 退出群组失败的相关信息
      });
  },
  /**
   * 显示消息
   * @param {*} textArr 
   * @param {*} type 
   */
  renderMessage: function (message) {
    let self = this
    let chatMsg = self.data.chatMsg;
    if (chatMsg.length >= 5) {
      chatMsg.shift();
    }
    chatMsg.push(message);
    self.setData({
      chatMsg: chatMsg,
      userMessage: ''
    });
  },
  /**
   * 摄像头翻转
   */
  onSwitchCameraClick: function () {
    this.data.frontCamera = !this.data.frontCamera;
    this.setData({
      frontCamera: this.data.frontCamera
    })
    this.ctx.switchCamera();
  },
  /**
   * 美颜
   */
  onBeautyClick: function () {
    if (this.data.beauty != 0) {
      this.data.beauty = 0;
      this.data.whiteness = 0;
    } else {
      this.data.beauty = 6.3;
      this.data.whiteness = 3.0;
    }

    this.setData({
      beauty: this.data.beauty,
      whiteness: this.data.whiteness
    })
  },
  /**
   * 开启或关闭麦克风
   */
  onMuteClick: function () {
    this.setData({
      enable_mic: !this.data.enable_mic
    })
  },
  /**
   * 发送消息
   */
  sendMessageTap: function () {
    let self = this;
    self.hideInput();

    if (self.data.userMessage.trim().length < 1) return;

    // 发送文本消息，Web 端与小程序端相同
    // 1. 创建消息实例，接口返回的实例可以上屏
    let message = self.tim.createTextMessage({
      to: self.data.roomId,
      conversationType: TIM.TYPES.CONV_GROUP,
      payload: {
        text: self.data.userMessage.trim()
      }
    });
    // 2. 发送消息
    self.tim.sendMessage(message).then(
      function (imResponse) {
        // 发送成功
        console.log('消息发送成功')

        var ID = utils.getGuid();
        self.renderMessage({
          ID: "A" + ID.substring(1, 31),
          nick: app.globalData.userInfo.NickName,
          text: self.data.userMessage.trim()
        });
      },
      function (imError) {
        // 发送失败
        self.setData({
          userMessage: ''
        });
        wx.showToast({
          title: imError.message,
          icon: "none"
        })
      });
  },
  /**
   * 绑定输入
   * @param {}} e 
   */
  blurInput: function (e) {
    this.setData({
      userMessage: e.detail.value
    })
  },
  /**
   * 弹出输入框
   */
  tapInput: function () {
    var that = this;
    that.setData({
      showInput: 1
    })
  },
  /**
   * 取消输入框
   */
  hideInput: function () {
    var self = this;
    self.setData({
      showInput: 0
    });
  },
  onUnload: function () {
    wx.setKeepScreenOn({
      keepScreenOn: false,
    })
    this.dismissGroupTap();
    this.logoutTap();
  }
})